Schema Design এর বেস্ট প্র্যাকটিস
Elasticsearch-এ Schema Design একটি গুরুত্বপূর্ণ কাজ, যা ডেটার কাঠামো এবং সার্চ অপারেশনের পারফরম্যান্স নির্ধারণ করে। একটি ভালোভাবে পরিকল্পিত স্কিমা Elasticsearch-কে ডেটা ইন্ডেক্স এবং সার্চ অপারেশন দ্রুত ও কার্যকরভাবে পরিচালনা করতে সহায়ক করে। নিচে Schema Design-এর কিছু বেস্ট প্র্যাকটিস আলোচনা করা হলো, যা অনুসরণ করে আপনি Elasticsearch-এর পারফরম্যান্স এবং কার্যকারিতা উন্নত করতে পারবেন।
১. সঠিক ফিল্ড টাইপ নির্ধারণ করা
- প্রতিটি ফিল্ডের জন্য সঠিক ডেটা টাইপ নির্ধারণ করা অত্যন্ত গুরুত্বপূর্ণ। এটি ডেটা ইন্ডেক্সিং এবং সার্চ অপারেশন দ্রুত করতে সহায়ক করে।
- উদাহরণস্বরূপ:
- ফ্রি-টেক্সটের জন্য text টাইপ ব্যবহার করুন।
- সুনির্দিষ্ট মানের জন্য keyword টাইপ ব্যবহার করুন।
- সংখ্যামূলক ডেটার জন্য integer, float, বা double ব্যবহার করুন।
- তারিখ এবং সময়ের জন্য date টাইপ ব্যবহার করুন।
ভুল:
"price": { "type": "text" }
সঠিক:
"price": { "type": "float" }
- ফিল্ডের সঠিক টাইপ নির্ধারণ করলে Elasticsearch ইন্ডেক্স এবং সার্চ অপারেশন দ্রুত করতে পারে।
২. Text এবং Keyword ফিল্ডের পার্থক্য বোঝা এবং সঠিকভাবে প্রয়োগ করা
- Text এবং Keyword টাইপের মধ্যে পার্থক্য বোঝা গুরুত্বপূর্ণ।
- Text টাইপ ফ্রি-টেক্সট ডেটা টোকেনাইজ করে এবং সার্চের জন্য এনালাইসিস করে।
- Keyword টাইপ সুনির্দিষ্ট মানের জন্য ব্যবহার করা হয়, যা সাধারণত এক্সাক্ট ম্যাচ সার্চের জন্য উপযুক্ত।
- যদি সার্চ অপারেশন ফ্রি-টেক্সট এনালাইসিসের উপর ভিত্তি করে না হয়, তবে keyword টাইপ ব্যবহার করা উচিত, যা সার্চ পারফরম্যান্স উন্নত করতে সহায়ক।
উদাহরণ:
{
"properties": {
"title": { "type": "text" },
"category": { "type": "keyword" }
}
}
- এখানে
"title"
ফিল্ডে text
এবং "category"
ফিল্ডে keyword
টাইপ ব্যবহার করা হয়েছে।
৩. ইন্ডেক্সিং সীমিত করা
- সব ফিল্ড ইন্ডেক্স করা প্রয়োজন নেই। শুধুমাত্র যে ফিল্ডগুলো সার্চ অপারেশনের জন্য প্রয়োজন, সেগুলো ইন্ডেক্স করা উচিত।
- index: false ব্যবহার করে প্রয়োজনীয় নয় এমন ফিল্ডগুলো ইন্ডেক্সিং থেকে বাদ দিন, যা ইন্ডেক্স সাইজ কমায় এবং পারফরম্যান্স বাড়ায়।
উদাহরণ:
{
"properties": {
"description": { "type": "text", "index": false },
"name": { "type": "keyword" }
}
}
- এখানে
"description"
ফিল্ড ইন্ডেক্স করা হয়নি, কারণ এটি সার্চ অপারেশনের জন্য প্রয়োজন নেই।
৪. Dynamic Mapping সীমিত রাখা
- Dynamic Mapping Elasticsearch-এ ডিফল্টভাবে সক্রিয় থাকে, যা নতুন ফিল্ড সনাক্ত করে ডেটা টাইপ নির্ধারণ করে।
- Dynamic Mapping সবসময় সঠিক ডেটা টাইপ নির্ধারণ করতে পারে না এবং এটি সার্চ পারফরম্যান্সের উপর নেতিবাচক প্রভাব ফেলতে পারে।
- যখন সম্ভব, Static Mapping ব্যবহার করা উচিত, যাতে প্রতিটি ফিল্ড এবং তার ডেটা টাইপ আগে থেকেই নির্ধারণ করা থাকে।
উদাহরণ:
PUT /fixed-index
{
"mappings": {
"dynamic": "strict",
"properties": {
"username": { "type": "keyword" },
"created_at": { "type": "date", "format": "yyyy-MM-dd" }
}
}
}
- এখানে
"dynamic": "strict"
ব্যবহার করে Dynamic Mapping বন্ধ রাখা হয়েছে।
৫. Nested এবং Object টাইপ ব্যবহারে সতর্ক থাকা
- Nested এবং Object টাইপ জটিল ডেটা স্ট্রাকচার সংরক্ষণের জন্য ব্যবহৃত হয়, তবে এগুলো ব্যবহার করলে সার্চ এবং ইন্ডেক্সিং পারফরম্যান্সে প্রভাব পড়তে পারে।
- শুধুমাত্র যেখানে Nested ডেটার জন্য আলাদা ডকুমেন্ট সংরক্ষণ এবং সার্চের প্রয়োজন আছে, সেখানে nested টাইপ ব্যবহার করা উচিত।
উদাহরণ:
{
"properties": {
"comments": {
"type": "nested",
"properties": {
"user": { "type": "keyword" },
"message": { "type": "text" }
}
}
}
}
- এখানে
"comments"
ফিল্ডে nested
টাইপ ব্যবহার করা হয়েছে, যা জটিল কোয়েরির জন্য উপযোগী।
৬. Date ফিল্ডের ফরম্যাট নির্ধারণ করা
- Date ফিল্ডে সঠিক ফরম্যাট নির্ধারণ করা অত্যন্ত গুরুত্বপূর্ণ, যাতে Elasticsearch ডেটা সঠিকভাবে ইন্ডেক্স এবং রিট্রিভ করতে পারে।
- ডিফল্ট ফরম্যাট ছাড়াও, কাস্টম ফরম্যাট ব্যবহার করে তারিখ সংরক্ষণ করা উচিত।
উদাহরণ:
{
"properties": {
"event_date": { "type": "date", "format": "yyyy-MM-dd HH:mm:ss" }
}
}
- এখানে
"event_date"
ফিল্ডে কাস্টম ফরম্যাট নির্ধারণ করা হয়েছে।
৭. Geo-Point এবং Geo-Shape ফিল্ডের সঠিক ব্যবহার
- ভৌগোলিক ডেটা সংরক্ষণের জন্য geo_point বা geo_shape টাইপ ব্যবহার করা উচিত। এটি জিওস্পেশিয়াল কোয়েরি চালাতে এবং অবস্থানভিত্তিক ডেটা বিশ্লেষণ করতে সহায়ক।
- যেসব ক্ষেত্রে অবস্থানের ভিত্তিতে সার্চ প্রয়োজন সেখানে geo_point ব্যবহার করা উচিত এবং বড় আকারের ভৌগোলিক আকারের জন্য geo_shape।
উদাহরণ:
{
"properties": {
"location": { "type": "geo_point" }
}
}
- এখানে
"location"
ফিল্ডে geo_point
টাইপ ব্যবহার করা হয়েছে।
৮. Field Name এবং Type Naming Conventions অনুসরণ করা
- ফিল্ড নাম এবং ডেটা টাইপ নির্ধারণ করার সময় কনভেনশন মেনে চলা উচিত। এটি ইন্ডেক্স এবং সার্চ অপারেশন ম্যানেজ করতে সহজ করে এবং স্কিমার সাথে সামঞ্জস্য বজায় রাখে।
- ফিল্ড নাম সংক্ষিপ্ত এবং বর্ণনামূলক হওয়া উচিত, যাতে এটি বোঝা যায়।
৯. Completion এবং Suggestion ফিল্ড সঠিকভাবে ব্যবহার করা
- যদি অটো-কমপ্লিশন বা সাজেশন সার্চ প্রয়োজন হয়, তবে completion টাইপ ব্যবহার করা উচিত। এটি সার্চ টাইম কমাতে সাহায্য করে।
- শুধুমাত্র যেখানে দ্রুত সাজেশন প্রয়োজন সেখানে এটি ব্যবহার করুন, কারণ এটি মেমোরি ব্যবহার বাড়াতে পারে।
উদাহরণ:
{
"properties": {
"suggest": { "type": "completion" }
}
}
- এখানে
"suggest"
ফিল্ডে completion
টাইপ ব্যবহার করা হয়েছে, যা অটো-কমপ্লিশন সার্চের জন্য উপযোগী।
১০. ইন্ডেক্স সাইজ এবং শার্ড সংখ্যা নির্ধারণ করা
- Schema Design করার সময় শার্ড এবং রেপ্লিকা সংখ্যা নির্ধারণ করা উচিত। ডেটার পরিমাণ এবং স্কেল অনুযায়ী শার্ড সংখ্যা নির্ধারণ করলে ইন্ডেক্স পারফরম্যান্স উন্নত হয়।
- ইন্ডেক্স তৈরির সময় সঠিকভাবে শার্ড এবং রেপ্লিকা সংখ্যা নির্ধারণ করতে ভুলবেন না।
উদাহরণ:
PUT /optimized-index
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1
}
}
- এখানে ৩টি শার্ড এবং ১টি রেপ্লিকা নির্ধারণ করা হয়েছে।
উপসংহার
Elasticsearch-এ Schema Design করার সময় কিছু বেস্ট প্র্যাকটিস অনুসরণ করলে ইন্ডেক্সিং এবং সার্চ অপারেশনের পারফরম্যান্স ও কার্যকারিতা উন্নত হয়। সঠিক ফিল্ড টাইপ নির্ধারণ, প্রয়োজনীয় ফিল্ডগুলো ইন্ডেক্স করা, এবং Dynamic Mapping নিয়ন্ত্রণ করার মতো চর্চাগুলো Elasticsearch-কে আরও কার্যকর করে তোলে। Schema Design